const myNew = function (constructor, ...args) {
  // 创建一个新对象
  const obj = {};
  // 将空对象的__proto__指向构造函数的prototype
  Object.setPrototypeOf(obj, constructor.prototype);
  // 将构造函数的this指向该空对象
  const result = constructor.apply(obj, args);
  // 判断该构造函数执行后返回值是否为引用类型，是的话 返回该引用类型
  return Object.prototype.toString.call(result) === "[object Object]"
    ? result
    : obj;
};

function Person(name, age) {
  this.name = name;
  this.age = age;
}

const p1 = myNew(Person, "yyx", 18);

console.log(p1);
